package com.huimin.merchant.service.impl;

import com.huimin.merchant.service.FileService;
import com.huiminpay.common.cache.domain.BusinessException;
import com.huiminpay.common.cache.domain.CommonErrorCode;
import com.huiminpay.common.cache.util.QiniuUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;

/**
 * @author amx
 * @date 2020/12/2 20:43
 */
@Service
@Slf4j
public class FileServiceImpl implements FileService {

	/**
	 * 七牛云域名，qkpk617d7.hn-bkt.clouddn.com/
	 */
	@Value("${oss.qiniu.url}")
	private String qiniuUrl;

	/**
	 * 访问密钥
	 */
	@Value("${oss.qiniu.accessKey}")
	private String accessKey;

	/**
	 * 密钥
	 */
	@Value("${oss.qiniu.secretKey}")
	private String secretKey;

	/**
	 * 空间名称
	 */
	@Value("${oss.qiniu.bucket}")
	private String bucket;


	/**
	 * 上传图片
	 *
	 * @param multipartFile 文件
	 * @return 网络路径
	 */
	@Override
	public String upload(MultipartFile multipartFile) throws Exception {
		// 判断传入的参数是否为空
		if (multipartFile == null || multipartFile.isEmpty()) {
			throw new BusinessException(CommonErrorCode.E_200202);
		}
		// 上传图片的byte[]参数
		byte[] bytes = multipartFile.getBytes();

		// 文件名碎片1：随机值
		String s = UUID.randomUUID().toString();

		//文件名碎片2：文件原始名称
		String originalFilename = multipartFile.getOriginalFilename();

		assert originalFilename != null;
		// 文件名碎片3：截取扩展名
		String subString = originalFilename.substring(originalFilename.lastIndexOf(".") - 1);

		// 最终上传文件名 = 碎片1 + 碎片3
		String fileName = s + subString;
		QiniuUtils.upload2Qiniu(accessKey, secretKey, bucket, bytes, fileName);

		// 返回值 = url路径 + 文件名
		return qiniuUrl + fileName;
	}
}
